home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The 640 MEG Shareware Studio 2
/
The 640 Meg Shareware Studio CD-ROM Volume II (Data Express)(1993).ISO
/
rbbs
/
lrge174.zip
/
RSB5LRGE.MRG
< prev
Wrap
Text File
|
1992-10-20
|
3KB
|
63 lines
* ------------[ BLED merge (c) Ken Goosens ]-------------
* Merge this against RBBSSUB5.BAS to produce RBBSSUB5.NEW
* RBBSSUB5.BAS: Date 06-20-1992 Size 116575 bytes
* ------------[ Created 10-20-1992 19:21:40 ]------------
* REPLACING old line(s) by new
63520 ' $SUBTITLE: 'BinSearch - binary search a file'
' $PAGE
'
' NAME -- BinSearch
' MEANING
' INPUTS -- PassedSearchFor$ Value you are looking for
' StartPos Starting position of sort key
' NumChars # of characters in sort key
' LenRec Length of record of data file searching
* ------[ first line different ]------
' High& Record # of last record ' LRGE174/YB102001
' ZFastTabs$ In a binary integer subfield (2 bytes)
' holds 1st record when might find
' a key beginning with a particular
' character (0-9,A-Z). Empty if
' no Fast Tab exists for the file.
'
' OUTPUTS -- RecFoundAt Record # value found at (0 if none)
' RecFound$ Full data record when found
'
' PURPOSE -- Binary searches work file #2 for a key value in a
' data file that is sorted on a key field
'
SUB BinSearch (PassedSearchFor$,StartPos, NumChars, LenRec, High&, RecFoundAt&, RecFound$) STATIC ' LRGE174/YB102001
SearchFor$ = LEFT$(PassedSearchFor$,NumChars)
SearchFor$ = SearchFor$ + SPACE$(NumChars-LEN(SearchFor$))
FIELD #2, LenRec AS SearchRec$
Low& = 0 ' LRGE174/YB102001
IF LEN(ZFastTabs$) < 72 THEN _
GOTO 63522
WasX$ = LEFT$(SearchFor$,1)
WasX = INSTR("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ",WasX$)
IF WasX > 0 THEN _
Low& = CVI(MID$(ZFastTabs$,1+2*(WasX-1),2)) - 1 : _ ' LRGE174/YB102001
IF WasX < 36 THEN _
High& = CVI(MID$(ZFastTabs$,1+2*WasX,2)) ' LRGE174/YB102001
63522 RecFoundAt& = 0 ' LRGE174/YB102001
IF High& < 1 THEN _ ' LRGE174/YB102001
EXIT SUB
WasX$ = SPACE$ (NumChars)
Done = ZFalse
WHILE NOT Done
WasI& = INT(((High&/2) + (Low&/2)) + .5) ' LRGE174/YB102001
GET 2, WasI& ' LRGE174/YB102001
LSET WasX$ = MID$(SearchRec$, StartPos, NumChars)
IF WasX$ = SearchFor$ THEN _
RecFound$ = SearchRec$: _
RecFoundAt& = WasI& : _ ' LRGE174/YB102001
Done = ZTrue _
ELSE IF (High& - Low&) < 2 THEN _ ' LRGE174/YB102001
Done = ZTrue _
ELSE IF WasX$ < SearchFor$ THEN _
Low& = WasI& _ ' LRGE174/YB102001
ELSE IF WasX$ > SearchFor$ THEN _
High& = WasI& ' LRGE174/YB102001
WEND
END SUB